document.addEventListener('DOMContentLoaded', function() {
    // DOM元素
    const batchPatientInfoSwitch = document.getElementById('batch-patient-info');
    const singlePatientFormContainer = document.getElementById('single-patient-form-container');
    const batchPatientFormContainer = document.getElementById('batch-patient-form-container');
    const excelUploadBtn = document.getElementById('excel-upload-btn');
    const excelFileInput = document.getElementById('excel-file-input');
    const excelInfo = document.getElementById('excel-info');
    const excelFilename = document.getElementById('excel-filename');
    const patientCount = document.getElementById('patient-count');
    const removeExcelBtn = document.getElementById('remove-excel-btn');
    const matchingStatus = document.getElementById('matching-status');
    const matchingInfo = document.getElementById('matching-info');

    // 存储解析出的病人信息
    let patientData = [];
    
    // 批量病人信息开关事件
    batchPatientInfoSwitch.addEventListener('change', function() {
        if (this.checked) {
            singlePatientFormContainer.classList.add('d-none');
            batchPatientFormContainer.classList.remove('d-none');
        } else {
            singlePatientFormContainer.classList.remove('d-none');
            batchPatientFormContainer.classList.add('d-none');
            // 重置批量上传状态
            resetExcelUpload();
        }
    });
    
    // Excel上传按钮点击事件
    excelUploadBtn.addEventListener('click', function() {
        excelFileInput.click();
    });
    
    // Excel文件选择事件
    excelFileInput.addEventListener('change', function(e) {
        if (this.files.length === 0) return;
        
        const file = this.files[0];
        
        // 检查文件类型
        if (!file.name.match(/\.(xlsx|xls)$/i)) {
            showAlert('错误', '请上传Excel文件（.xlsx或.xls格式）', 'danger');
            return;
        }
        
        // 显示加载中状态
        excelInfo.classList.remove('d-none');
        excelFilename.textContent = file.name;
        patientCount.textContent = '正在解析...';
        
        // 解析Excel文件
        parseExcelFile(file);
    });
    
    // 移除Excel文件
    removeExcelBtn.addEventListener('click', function() {
        resetExcelUpload();
    });
    
    // 解析Excel文件
    function parseExcelFile(file) {
        const reader = new FileReader();
        
        reader.onload = function(e) {
            try {
                const data = new Uint8Array(e.target.result);
                const workbook = XLSX.read(data, { type: 'array' });
                
                // 假设第一个工作表包含数据
                const firstSheetName = workbook.SheetNames[0];
                const worksheet = workbook.Sheets[firstSheetName];
                
                // 将工作表转换为JSON
                const jsonData = XLSX.utils.sheet_to_json(worksheet);
                
                // 验证数据格式
                if (!validatePatientData(jsonData)) {
                    showAlert('错误', '上传的Excel格式不正确，请使用正确的模板', 'danger');
                    resetExcelUpload();
                    return;
                }
                
                // 保存病人数据
                patientData = jsonData.map(record => ({
                    id: record['病历号'] || '',
                    name: record['姓名'] || '',
                    gender: record['性别'] || '',
                    age: record['年龄'] || '',
                    photo: record['照片'] || ''
                }));
                
                // 更新UI
                patientCount.textContent = patientData.length;
                
                // 显示匹配状态
                matchingStatus.classList.remove('d-none');
                
                // 尝试匹配当前已上传的图片
                matchPatientsWithImages();
                
                showAlert('成功', `成功导入 ${patientData.length} 条病人信息`, 'success');
                
            } catch (error) {
                console.error('解析Excel文件出错:', error);
                showAlert('错误', '解析Excel文件失败: ' + error.message, 'danger');
                resetExcelUpload();
            }
        };
        
        reader.onerror = function() {
            showAlert('错误', '读取文件失败', 'danger');
            resetExcelUpload();
        };
        
        // 读取文件
        reader.readAsArrayBuffer(file);
    }
    
    // 验证病人数据格式
    function validatePatientData(data) {
        if (!data || data.length === 0) return false;
        
        // 检查第一条记录是否包含所需的所有字段
        const firstRecord = data[0];
        return firstRecord.hasOwnProperty('病历号') && 
               firstRecord.hasOwnProperty('姓名') && 
               firstRecord.hasOwnProperty('性别') && 
               firstRecord.hasOwnProperty('年龄') && 
               firstRecord.hasOwnProperty('照片');
    }
    
    // 重置Excel上传状态
    function resetExcelUpload() {
        excelFileInput.value = '';
        excelInfo.classList.add('d-none');
        matchingStatus.classList.add('d-none');
        patientData = [];
    }
    
    // 匹配病人信息和图片的优化版本函数
    function matchPatientsWithImages() {
        // 检查是否有病人数据
        if (patientData.length === 0) {
            matchingInfo.textContent = '无病人信息可匹配';
            return;
        }
        
        // 获取当前模式和已上传的文件
        const activeTab = document.querySelector('.tab-pane.active');
        const isBatchMode = activeTab.id === 'single-eye' 
            ? document.getElementById('batch-mode-single').checked
            : document.getElementById('batch-mode-both').checked;
        
        if (!isBatchMode) {
            matchingInfo.textContent = '请先开启图片批量处理模式';
            return;
        }
        
        let files = [];
        
        if (activeTab.id === 'single-eye') {
            // 单眼模式
            files = Array.from(document.getElementById('single-folder-input').files)
                .filter(f => f.type.match('image/(jpeg|png|jpg)'));
        } else {
            // 双眼模式
            const leftFiles = Array.from(document.getElementById('left-folder-input').files)
                .filter(f => f.type.match('image/(jpeg|png|jpg)'));
            // 使用左眼图片进行匹配
            files = leftFiles;
        }
        
        if (files.length === 0) {
            matchingInfo.textContent = '请先上传图片文件';
            return;
        }
        
        // 开始匹配图片和病人信息
        let matchedCount = 0;
        let matchDetails = [];
        
        files.forEach(file => {
            const fileName = file.name;
            
            let matchedPatient = null;
            
            // 必须直接完全匹配照片字段
            matchedPatient = patientData.find(patient => 
                patient.photo && fileName === patient.photo
            );
            
            if (matchedPatient) {
                matchedCount++;
                matchDetails.push(`${fileName} -> ${matchedPatient.name}(${matchedPatient.id})`);
            }
        });
        
        // 更新匹配状态
        matchingInfo.textContent = `共匹配到 ${matchedCount}/${files.length} 张图片的病人信息`;
        
        // 如果存在未匹配的文件，给出警告
        if (matchedCount < files.length) {
            showAlert('警告', `有 ${files.length - matchedCount} 张图片未找到对应的病人信息`, 'warning');
        } else if (matchedCount > 0) {
            showAlert('成功', `成功匹配 ${matchedCount} 张图片的病人信息`, 'success');
            console.log('匹配详情:', matchDetails);
        }
    }
    
    // 修改getPatientByPhotoName方法，优化匹配算法
    window.patientInfoModule = {
        isBatchMode: function() {
            return batchPatientInfoSwitch.checked;
        },
        getPatientData: function() {
            return patientData;
        },
        getPatientByPhotoName: function(photoName) {
            if (!photoName || patientData.length === 0) return null;
            
            // 直接完全匹配照片字段
            let matchedPatient = patientData.find(patient => 
                patient.photo && photoName === patient.photo
            );
            return matchedPatient;
        },
        matchPatientsWithImages: matchPatientsWithImages
    };
    
    // 为了支持全局调用showAlert函数
    function showAlert(title, message, type = 'warning') {
        if (window.showAlert) {
            window.showAlert(title, message, type);
        } else {
            alert(`${title}: ${message}`);
        }
    }
}); 